home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Musique / Quod Libet / quodlibet-3.3.0-installer.exe / bin / json / tests / test_recursion.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2014-12-31  |  4KB  |  135 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. from json.tests import PyTest, CTest
  5.  
  6. class JSONTestObject:
  7.     pass
  8.  
  9.  
  10. class TestRecursion(object):
  11.     
  12.     def test_listrecursion(self):
  13.         x = []
  14.         x.append(x)
  15.         
  16.         try:
  17.             self.dumps(x)
  18.         except ValueError:
  19.             pass
  20.  
  21.         self.fail("didn't raise ValueError on list recursion")
  22.         x = []
  23.         y = [
  24.             x]
  25.         x.append(y)
  26.         
  27.         try:
  28.             self.dumps(x)
  29.         except ValueError:
  30.             pass
  31.  
  32.         self.fail("didn't raise ValueError on alternating list recursion")
  33.         y = []
  34.         x = [
  35.             y,
  36.             y]
  37.         self.dumps(x)
  38.  
  39.     
  40.     def test_dictrecursion(self):
  41.         x = { }
  42.         x['test'] = x
  43.         
  44.         try:
  45.             self.dumps(x)
  46.         except ValueError:
  47.             pass
  48.  
  49.         self.fail("didn't raise ValueError on dict recursion")
  50.         x = { }
  51.         y = {
  52.             'a': x,
  53.             'b': x }
  54.         self.dumps(x)
  55.  
  56.     
  57.     def test_defaultrecursion(self):
  58.         
  59.         class RecursiveJSONEncoder(self.json.JSONEncoder):
  60.             recurse = False
  61.             
  62.             def default(self, o):
  63.                 if o is JSONTestObject:
  64.                     if self.recurse:
  65.                         return [
  66.                             JSONTestObject]
  67.                     return None
  68.                 return pyjson.JSONEncoder.default(o)
  69.  
  70.  
  71.         enc = RecursiveJSONEncoder()
  72.         self.assertEqual(enc.encode(JSONTestObject), '"JSONTestObject"')
  73.         enc.recurse = True
  74.         
  75.         try:
  76.             enc.encode(JSONTestObject)
  77.         except ValueError:
  78.             pass
  79.  
  80.         self.fail("didn't raise ValueError on default recursion")
  81.  
  82.     
  83.     def test_highly_nested_objects_decoding(self):
  84.         with self.assertRaises(RuntimeError):
  85.             self.loads('{"a":' * 100000 + '1' + '}' * 100000)
  86.         with self.assertRaises(RuntimeError):
  87.             self.loads('{"a":' * 100000 + '[1]' + '}' * 100000)
  88.         with self.assertRaises(RuntimeError):
  89.             self.loads('[' * 100000 + '1' + ']' * 100000)
  90.         with self.assertRaises(RuntimeError):
  91.             self.loads(u'{"a":' * 100000 + u'1' + u'}' * 100000)
  92.         with self.assertRaises(RuntimeError):
  93.             self.loads(u'{"a":' * 100000 + u'[1]' + u'}' * 100000)
  94.         with self.assertRaises(RuntimeError):
  95.             self.loads(u'[' * 100000 + u'1' + u']' * 100000)
  96.  
  97.     
  98.     def test_highly_nested_objects_encoding(self):
  99.         l = []
  100.         d = { }
  101.         for x in xrange(100000):
  102.             l = [
  103.                 l]
  104.             d = {
  105.                 'k': d }
  106.         
  107.         with self.assertRaises(RuntimeError):
  108.             self.dumps(l)
  109.         with self.assertRaises(RuntimeError):
  110.             self.dumps(d)
  111.  
  112.     
  113.     def test_endless_recursion(self):
  114.         
  115.         class EndlessJSONEncoder(self.json.JSONEncoder):
  116.             
  117.             def default(self, o):
  118.                 '''If check_circular is False, this will keep adding another list.'''
  119.                 return [
  120.                     o]
  121.  
  122.  
  123.         with self.assertRaises(RuntimeError):
  124.             EndlessJSONEncoder(check_circular = False).encode((0+5j))
  125.  
  126.  
  127.  
  128. class TestPyRecursion(TestRecursion, PyTest):
  129.     pass
  130.  
  131.  
  132. class TestCRecursion(TestRecursion, CTest):
  133.     pass
  134.  
  135.